package com.xndc.netty.iec104.model;

import lombok.Data;

/**
 * IEC 104控制帧(S帧或U帧)
 */
@Data
public class IEC104ControlFrame implements IEC104Frame {
    
    /**
     * 控制类型
     */
    public enum ControlType {
        S_FRAME,              // 监视帧
        STARTDT_ACT,          // 启动激活
        STARTDT_CON,          // 启动确认
        STOPDT_ACT,           // 停止激活
        STOPDT_CON,           // 停止确认
        TESTFR_ACT,           // 测试激活
        TESTFR_CON            // 测试确认
    }
    
    /**
     * 控制类型
     */
    private ControlType controlType;
    
    /**
     * 接收序列号(仅S帧有效)
     */
    private short receiveSequence;
    
    @Override
    public byte[] encode() {
        // 这里需要实现控制帧的编码逻辑，暂时返回空数组
        return new byte[0];
    }
    
    @Override
    public boolean isControlFrame() {
        return true;
    }
    
    @Override
    public ASDU getAsdu() {
        // 控制帧没有ASDU
        return null;
    }
    
    @Override
    public boolean needsConfirmation() {
        // 只有激活类型的U帧需要确认
        switch(controlType) {
            case STARTDT_ACT:
            case STOPDT_ACT:
            case TESTFR_ACT:
                return true;
            default:
                return false;
        }
    }
} 